//package com.ruoyi.system.chat;
//
//
//import com.alibaba.fastjson2.JSON;
//import com.ruoyi.common.constant.CacheConstants;
//import com.ruoyi.common.core.domain.model.LoginUser;
//import com.ruoyi.common.core.redis.RedisCache;
//import com.ruoyi.common.utils.spring.SpringUtils;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//
//import java.io.*;
//import java.net.Socket;
//import java.net.UnknownHostException;
//import java.util.Set;
//import java.util.concurrent.ExecutorService;
//import java.util.concurrent.Executors;
//
//@Slf4j
//public class ChatClient {
//
//    private String HOST;
//    private int PORT;
//
//    public String chatUserId;
//    public String chatUserName;
//
//    public LoginUser loginUser;
//
//
//    @Autowired
//    private RedisCache redisCache = SpringUtils.getBean(RedisCache.class);
//
//    public ChatClient(LoginUser loginUser, String host, Integer port){
//        this.loginUser = loginUser;
//        this.chatUserId = String.valueOf(loginUser.getUserId());
//        this.chatUserName = loginUser.getUsername();
//        this.HOST = host;
//        this.PORT = port;
//    }
//
//    public void clientStart() {
//        Socket socket = null;
//
//        try {
//            // 连接到服务器
//            socket = new Socket(HOST, PORT);
//            log.info(chatUserName + " 已连接到服务器: " + socket.getInetAddress().getHostAddress());
//            try (
//                    // 获取输出流，用于向服务器发送消息
//                    PrintWriter out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);
//                    // 获取输入流，用于读取服务器消息
//                    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))
//            ){
//                out.println(chatUserId);
//                out.println(JSON.toJSONString(loginUser));
//
//                // 设置用户存在标志
//                redisCache.setCacheObject(CacheConstants.CHAT_USER_EXIST_FLAG + chatUserId, "1");
//
////                startClientSocketStopMonitor();
//
//                while (true){
//                    String existFlag = redisCache.getCacheObject(CacheConstants.CHAT_USER_EXIST_FLAG + chatUserId);
//                    if(existFlag == null || existFlag.equals("0")){
//                        log.info("用户：{} 已断开连接",chatUserId);
//                        break;
//                    }
//                    try {
//                        Thread.sleep(3000);
//                    } catch (InterruptedException e) {
//                        throw new RuntimeException(e);
//                    }
//                }
//            }
//        } catch (UnknownHostException e) {
//            System.err.println("无法识别服务器地址: " + HOST);
//        } catch (IOException e) {
//            System.err.println("与服务器通信时发生错误: " + e.getMessage());
//        } finally {
//            try {
//                if (socket != null) {
//                    log.info("正在断开与服务器的连接");
//                    socket.close();
//                }
//            } catch (IOException e) {
//                System.err.println("关闭客户端Socket失败: " + e.getMessage());
//            }
//        }
//    }
//
//    private void startClientSocketStopMonitor() {
//        new Thread(()->{
//            while (true){
//                // 循环检查  用户是否退出系统
//                Set<String> cacheSet = redisCache.getCacheSet(CacheConstants.CHAT_USER_EXIST_FLAG + "*");
//                for (String existFlag : cacheSet) {
//                    if(existFlag == null || existFlag.equals("0")){
//                        break;
//                    }
//                }
//                try {
//                    Thread.sleep(3000);
//                } catch (InterruptedException e) {
//                    throw new RuntimeException(e);
//                }
//            }
//        },"client_socket_stop_monitor").start();
//    }
//
//
//}
